package pagecode.pages.mantenimiento;

import java.math.BigDecimal;
import java.util.Date;

import javax.faces.context.FacesContext;

import model.ComboModel;
import model.mantenimiento.ConfiguracionArchivoEnvioCobranzaModel;

import org.apache.log4j.Logger;

import pagecode.PageCodeBase;

import com.stefanini.pe.bbva.mbl.carga.in.to.ConfiguracionArchivoEnvioCobro;
import com.stefanini.pe.bbva.mbl.carga.in.to.Configuracionarchivo;
import com.stefanini.pe.bbva.mbl.carga.in.to.FormatoArchivo;
import com.stefanini.pe.bbva.mbl.carga.in.to.UsuarioSesion;
import com.stefanini.pe.bbva.mbl.in.dao.iface.ConfiguracionArchivoEnvioCobroBO;
import com.stefanini.pe.bbva.mbl.in.listeners.SpringInit;
import com.stefanini.pe.bbva.mbl.in.utils.Constantes;

public class ConfiguracionArchivoEnvioCobranza extends PageCodeBase {

	private static Logger logger = Logger.getLogger(ConfiguracionArchivoEnvioCobranza.class);
	
	protected ComboModel comboModel;
	
	ConfiguracionArchivoEnvioCobroBO configuracionArchivoEnvioCobroService = (ConfiguracionArchivoEnvioCobroBO)SpringInit.getApplicationContext().getBean("configuracionArchivoEnvioCobroService");
	ConfiguracionArchivoEnvioCobranzaModel configuracionArchivoEnvioCobranzaModel = new ConfiguracionArchivoEnvioCobranzaModel();
	
	public void onPageLoadEnd(FacesContext facescontext) {
	}

    private void cargarDatos(BigDecimal idConfiguracion) {
    	ConfiguracionArchivoEnvioCobro bean = configuracionArchivoEnvioCobroService.datosConfiguracion(idConfiguracion);
		FormatoArchivo bean2 = configuracionArchivoEnvioCobroService.datosFormatoArchivo(new BigDecimal("1"));
		FormatoArchivo bean3 = configuracionArchivoEnvioCobroService.datosFormatoArchivo(new BigDecimal("2"));
		
		 configuracionArchivoEnvioCobranzaModel.setConfiguracion(bean);
		 configuracionArchivoEnvioCobranzaModel.setFormatoArchivo1(bean2);
		 configuracionArchivoEnvioCobranzaModel.setFormatoArchivo2(bean3);
	}

	private boolean isPostBack() {
    	logger.info("Inicio");
    	
        if (this.getFacesContext().getExternalContext()
                .getRequestParameterMap().get("isPostBackArchivoDet") == null) {
        	
        	logger.info("Fin");
        	
            return false;
        } else {
        	logger.info("Fin");
        	
            return true;
        }
    }

    public void onPageLoadBegin(FacesContext facescontext) {
    	logger.info("Inicio");
    	
        if (!isPostBack()) {
        	logger.info("Entra por Primera vez");
    		cargarDatos(new BigDecimal("1"));
        }
        
        logger.info("Fin");
    }
    
    
    public String doBtnGuardarAction() {
    	 ConfiguracionArchivoEnvioCobro configuracionarchivo = null;
    	 FormatoArchivo formato1 = null;
    	 FormatoArchivo formato2 = null;
    	
        try {
        	logger.info("Inicio");
        	
        	UsuarioSesion oUsuarioSesion = new UsuarioSesion();
            oUsuarioSesion = (UsuarioSesion) this.getSession(true)
                    .getAttribute(Constantes.USUARIO_SESSION);
            
            configuracionarchivo = this.configuracionArchivoEnvioCobranzaModel.getConfiguracion();
            formato1 = this.configuracionArchivoEnvioCobranzaModel.getFormatoArchivo1();
            formato2 = this.configuracionArchivoEnvioCobranzaModel.getFormatoArchivo2();
            
            configuracionarchivo.setUsuario(oUsuarioSesion.getCodigoUsuario());
            formato1.setUsuario(oUsuarioSesion.getCodigoUsuario());
            formato2.setUsuario(oUsuarioSesion.getCodigoUsuario());
            
            if(validar(configuracionarchivo,formato1,formato2)){
            	configuracionArchivoEnvioCobroService.updateConfiguracion(configuracionarchivo);
                configuracionArchivoEnvioCobroService.updateFormato(formato1);
                configuracionArchivoEnvioCobroService.updateFormato(formato2);
                
                addMessagesError(Constantes.MSJ_REGISTRO_SATISFACTORIO);
            }
            
            logger.info("Fin");
            return "guardar";
        } catch (Exception e) {
        	
        	if(e.getMessage().indexOf("UQ_TSAA_CARG_CONF_ARCHIVO_01")>-1){
        		 //this.getConfiguracionArchivoEnvioCobroModel().setLblError_Text("La operacion no se realizo, el nombre fisico, nombre de archivo y estado deben ser unicos");
        		addMessagesError("La operacion no se realizo, el nombre fisico, nombre de archivo y estado deben ser unicos");
        	}else if(e.getMessage().indexOf("UQ_TSAA_CARG_CONF_ARCHIVO_02")>-1){
           		 //this.getConfiguracionArchivoEnvioCobroModel().setLblError_Text("La operacion no se realizo, el nombre fisico, nombre de archivo y estado deben ser unicos");
           		addMessagesError("La operacion no se realizo, el nombre fisico debe ser unico");
        	}else{
        		 //this.getConfiguracionArchivoEnvioCobroModel().setLblError_Text(Constantes.MSJ_ERROR_INESPERADO);
        		addMessagesError(Constantes.MSJ_ERROR_INESPERADO);
        	}
            logger.error(e.getMessage(), e);
        	return "";
        }
        
        
    }
    
    private boolean validar(
			ConfiguracionArchivoEnvioCobro config,
			FormatoArchivo formato1, FormatoArchivo formato2) {
		boolean error = false;
		String err = "";
		
		err = "Ingrese Hora con formato correcto (HH:MM)";
		if(config.getHora().length()==5){
			if(config.getHora().substring(2,3).equals(":")){
				try{
					int hh = Integer.parseInt(config.getHora().substring(0,2));
					int mm = Integer.parseInt(config.getHora().substring(3,5));
					if(hh<0 || hh>23 || mm<0 || mm>59){
						error = true;
						addMessagesError(err);
					}
				}
				catch(Exception e){
					error = true;
		            addMessagesError(err);
				}
			}
			else{
				error = true;
	            addMessagesError(err);
			}
		}
		else{
			error = true;
            addMessagesError(err);
		}
		
		if(config.getCorreo_Proc_Exito()==null || config.getCorreo_Proc_Exito().trim().equals("")){
			error = true;
            addMessagesError("Ingrese Correo de Procesados con Exito");
		}
		
		if(config.getCorreo_Proc_Error()==null || config.getCorreo_Proc_Error().trim().equals("")){
			error = true;
            addMessagesError("Ingrese Correo de Procesados con Error");
		}
		
		/*if(formato1.getSufijo()==null || formato1.getSufijo().trim().equals("")){
			error = true;
            addMessagesError("Ingrese Sufijo de Contratos Vigentes");
		}
		
		if(formato1.getPrefijo()==null || formato1.getPrefijo().trim().equals("")){
			error = true;
            addMessagesError("Ingrese Prefijo de Contratos Vigentes");
		}
		
		if(formato2.getSufijo()==null || formato2.getSufijo().trim().equals("")){
			error = true;
            addMessagesError("Ingrese Sufijo de Contratos Cancelados por Tipo RE");
		}
		
		if(formato2.getPrefijo()==null || formato2.getPrefijo().trim().equals("")){
			error = true;
            addMessagesError("Ingrese Prefijo de Contratos Cancelados por Tipo RE");
		}*/
		
		return !error;
	}

	private boolean validar(Configuracionarchivo configuracionarchivo) {
    	boolean resp = true;
    	String nombreFisico = null;
    	String nombreArchivoExterno = null;
    	String descripcion = null;
    	String extension = null;
    	Date fechaProceso = null;
    	String formatoFecha = null;
    	BigDecimal predecesor = null;
    	String directorio = null;
    	BigDecimal procesado = null;
    	BigDecimal validaCabecera = null;
    	
    	// Nombre Fisico
    	nombreFisico = configuracionarchivo.getNombrefisico();
    	
    	if(nombreFisico != null) {
    		if(nombreFisico.trim().equals("")) {
    			resp = false;    		
        		addMessagesError("* Ingrese el campo Nombre Fisico");
    		}
    	} else {
    		resp = false;
    		addMessagesError("* Ingrese el campo Nombre Fisico");
    	}
    	
    	// Nombre Archivo Externo
    	nombreArchivoExterno = configuracionarchivo.getNombrearchivoext();
    	
    	if(nombreArchivoExterno != null) {
    		if(nombreArchivoExterno.trim().equals("")) {
    			resp = false;    		
        		addMessagesError("* Ingrese el campo Nombre Archivo Externo");
    		}
    	} else {
    		resp = false;
    		addMessagesError("* Ingrese el campo Nombre Archivo Externo");
    	}
    	
    	// Descripcion
    	descripcion = configuracionarchivo.getDescarchivo();
    	
    	if(descripcion != null) {
    		descripcion = descripcion.trim();
    		if(descripcion.trim().length() > 250) {
    			resp = false;    		
        		addMessagesError("* El campo Descripcion supera los 250 caracteres");
    		}
    	} 
    	
    	// Extension
    	extension = configuracionarchivo.getExtension();
    	
    	if(extension != null) {
    		if(extension.trim().equals("")) {
    			resp = false;    		
        		addMessagesError("* Ingrese el campo Extension");
    		} else {
    			if(extension.trim().length() < 3) {
    				resp = false;    		
            		addMessagesError("* El campo Extension debe ser de 3 caracteres");
    			}
    		}
    	} else {
    		resp = false;
    		addMessagesError("* Ingrese el campo Extension");
    	}
	    	
    	// Fecha Proceso
    	fechaProceso = configuracionarchivo.getFechaproceso();
    	
    	if(fechaProceso == null) {
   			resp = false;    		
       		addMessagesError("* Ingrese el campo Fecha Proceso");
    	} 
    	
    	// Formato Fecha
    	formatoFecha = configuracionarchivo.getFormatofecha();
    	
    	if(formatoFecha != null) {
    		if(formatoFecha.equals("")) {
    			resp = false;    		
        		addMessagesError("* Ingrese el campo Formato Fecha");
    		}
    	} else {
    		resp = false;
    		addMessagesError("* Ingrese el campo Formato Fecha");
    	}
    	    	
    	// Predecesor
    	
    	predecesor = configuracionarchivo.getCodPredecesor();
    	
    	if(predecesor == null) {
   			resp = false;    		
       		addMessagesError("* Ingrese el campo Predecesor");
    	} 
    	
    	// Directorio
    	directorio = configuracionarchivo.getDirectorio();
    	
    	if(directorio != null) {
    		if(directorio.equals("")) {
    			resp = false;    		
        		addMessagesError("* Ingrese el campo Directorio");
    		}
    	} else {
    		resp = false;
    		addMessagesError("* Ingrese el campo Directorio");
    	}
    	
    	// Procesado
    	
    	procesado = configuracionarchivo.getFlagprocesado();
    	
    	if(procesado == null) {
   			resp = false;    		
       		addMessagesError("* Ingrese el campo Procesado");
    	} else {
    		if(procesado.intValue() > 1) {
    			resp = false;
    			addMessagesError("* El campo Procesado solo puede tener el valor 0 o 1");
    		}
    	}
    	
    	// Valida Cabecera
    	
    	validaCabecera = configuracionarchivo.getFlagCabecera();
    	
    	if(validaCabecera != null) {   			
    		if(validaCabecera.intValue() > 1) {
    			resp = false;
    			addMessagesError("* El campo Valida Cabecera solo puede tener el valor 0 o 1");
    		}
    	}
    
    	return resp;
    }
    
    public String doBtnCancelarAction() {
        try {        	
            /*this.getConfiguracionArchivoEnvioCobroModel().getEstadoFormulario().setEstadoActual(EstadoFormulario.CANCELAR);
            this.getConfiguracionArchivoEnvioCobroModel().setConfiguracionarchivo(new Configuracionarchivo());
            this.getConfiguracionArchivoEnvioCobroModel().setEgvConfArchivo_SelectedIndex(-1);
            this.getConfiguracionArchivoEnvioCobroModel().setEgvConfArchivo_selectedRow(new Configuracionarchivo());
            this.getConfiguracionArchivoEnvioCobroModel().setLblError_Text(StringUtil.Empty);
            this.getConfiguracionArchivoEnvioCobroModel().setStrTitulo("ARCHIVOS ORIGEN");
            this.getConfiguracionArchivoEnvioCobroModel().setBooIDConfArchivoRendered(true);
            this.setConfiguracionArchivoModel(new ConfiguracionArchivoModel());
            */
            //return "cancelar";
        } catch (Exception e) {
            //this.getConfiguracionArchivoEnvioCobroModel().setLblError_Text("Ocurrio un error al cancelar");
            logger.error(e.getMessage(), e);            
        }
    	
    	logger.info("Inicio");
    	logger.info("Fin");
    	
        return "cancelar";
    }
    
    /** 
	 * @managed-bean true
	 */
	public ConfiguracionArchivoEnvioCobranzaModel getConfiguracionArchivoEnvioCobranzaModel() {
		if (configuracionArchivoEnvioCobranzaModel == null) {
			configuracionArchivoEnvioCobranzaModel = (ConfiguracionArchivoEnvioCobranzaModel) getFacesContext()
					.getApplication().createValueBinding(
							"#{configuracionArchivoEnvioCobranzaModel}").getValue(
							getFacesContext());
		}
		return configuracionArchivoEnvioCobranzaModel;
	}
	/** 
	 * @managed-bean true
	 */
	public void setConfiguracionArchivoEnvioCobranzaModel(
			ConfiguracionArchivoEnvioCobranzaModel configuracionArchivoEnvioCobranzaModel) {
		this.configuracionArchivoEnvioCobranzaModel = configuracionArchivoEnvioCobranzaModel;
	}
	/** 
	 * @managed-bean true
	 */
	public ComboModel getComboModel() {
		if (comboModel == null) {
			comboModel = (ComboModel) getFacesContext().getApplication()
					.createValueBinding("#{comboModel}").getValue(
							getFacesContext());
		}
		return comboModel;
	}
	/** 
	 * @managed-bean true
	 */
	public void setComboModel(ComboModel comboModel) {
		this.comboModel = comboModel;
	}
}